其實昨天看似建好 models.py
就完成了,但其實我們只是對 Python 檔案做了編輯,並沒有動到資料庫。
仔細看在 hulolo
資料夾中偷偷出現了 db.sqlite3
,這就是資料庫的檔案,傳統上建立資料表、刪除、更新等等,都必須透過結構式查詢語言 (SQL) 進行操作。
但為了避免新手又溺死了,也能因應不同資料庫系統的變換,昨天我們透過 Django 檔案操作資料庫的方式稱為 ORM (Object Relational Mapping),講人話就是我們可以用 Python 操作資料庫,為了要使其與資料庫同步,還需要進行「遷移 (migration)」!
此外,傳統上資料庫的檢視也需要資料庫專門套件,而 Django 提供後台包含會員系統與資料庫管理網頁介面,方便開發者進行簡易的資料處理,而 /admin
則是進入後台的網址入口~
You have 18 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.
會發現每次啟動網站都會出現這些文字,這是代表一開始就內建了會員系統相關的資料表,所以可以先執行一次遷移:
python manage.py migrate
會出現很多很多的 ok,代表遷移完成:
Applying auth.0012_alter_user_first_name_max_length... OK
Applying sessions.0001_initial... OK
既然都有會員系統了,總有人要先管理這一切,想當然而就是自己了
python manage.py createsuperuser
接下來就會問一下基本問題:
Username (leave blank to use 'OOOO'): 帳號
Email address: 可以直接按 Enter
Password: 密碼
Password (again): 喵
Superuser created successfully.
接著就可以進入 http://127.0.0.1:8000/admin
,輸入帳密進入後台~
每一次的 models.py
改動,若要讓資料庫的資料表也有所變化,都需要進行遷移 (migration) 這個動作:
settings.py
參數:settings.py
中的 INSTALLED_APPS
加上 APP 的名稱,Django 就能追蹤你對 APP 做了哪些變動 (包含models.py
的改變):
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'import_export', #這是之前 Day03 所安裝的套件,可以幫助做資料輸入輸出
'chatbot' #這裡放新增的 APP 名稱
]
產生遷移文件
python manage.py makemigrations
仔細看
migrations
資料夾中的 py 檔案,會發現資料變化的紀錄,此步驟是產生要操作資料庫內容,如果偵測到變化,就會顯示以下內容:
Migrations for 'chatbot':
chatbot\migrations\0001_initial.py
+ Create model Course
進行遷移
python manage.py migrate
此步驟執行後就會讓資料庫的結構與 Django 同步。
同樣回到 http://127.0.0.1:8000/admin
,就會發現怎麼沒有 QQ
先去喝杯咖啡壓壓驚。
admin.py
在後台顯示資料表儘管資料庫同步了,但想讓 Django 原生後台顯示該資料表還需要在 admin.py
櫃台登記,在 hulolo
> chatbot
> admin.py
加上:
from django.contrib import admin
from .models import Course
from import_export.admin import ImportExportModelAdmin
@admin.register(Course)
class CourseAdmin(ImportExportModelAdmin):
list_display = ('teacher_name','course_name')
這裡有個語法糖果 aka 裝飾器
admin.register
是向後台註冊了此資料表;類別CourseAdmin
則是處理資料表的呈現;list_display
則是決定要在後台顯示哪些欄位,這邊先顯示了兩個~
同樣回到 http://127.0.0.1:8000/admin
,就會看到多出了 Course
玩意兒,如果點著點著看到了這畫面,就代表你功成名就了~試試看新增一筆課程評價吧!
在這篇文章中,我們學會了: